<?php
/**
 * 发送钉钉消息
 *
 * Created by PhpStorm.
 * User: sunqiang
 * Date: 2018/12/29
 * Time: 上午11:47
 */

/**
 * 发送文本类型消息
 *
 * @param string $message 消息内容
 * @param string $atMobiles 要艾特的人
 * @param int $isAtAll 艾特所有人
 *
 * @return bool|string 返回发送结果
 */
function dingText($message = 'test', $atMobiles = '17612906056', $isAtAll = 0)
{
    // 钉钉发送消息格式
    $content = '{"msgtype": "text","text": {"content": "' . $message . '"},"at": {"atMobiles": ["' . $atMobiles . '"],"isAtAll": ' . $isAtAll . '}}';
    // 请求钉钉
    return ding($content);
}

/**
 * 发送链接消息
 *
 * @param string $text 消息内容
 * @param string $title 消息标题
 * @param string $picUrl 消息图片
 * @param string $messageUrl 消息链接
 *
 * @return mixed
 */
function dingLink($text = 'text', $title = 'title', $picUrl = 'http://localhost:8888/ding', $messageUrl = 'http://localhost:8888/ding')
{
    // 获取发送钉钉请求地址
    $webhook = config('dev.ding')['webhook'];
    // 钉钉发送消息格式
    $content = '{"msgtype": "link", "link": {"text":"' . $text . '", "title": "' . $title . '", "picUrl": "' . $picUrl . '", "messageUrl": "' . $messageUrl . '"}}';
    // 请求钉钉
    return ding($content);
}

/**
 * 发送markdown消息方法
 *
 * @param string $title 消息标题
 * @param string $text 消息内容
 * @param string $atMobiles 艾特的人
 * @param int $isAtAll 艾特所有人
 *
 * @return mixed
 */
function dingMarkdown($title = 'title', $text = 'text', $atMobiles = '17612906056', $isAtAll = 0)
{
    // 钉钉发送消息格式
    $content = '{"msgtype": "markdown","markdown": {"title":"' . $title . '","text":"' . $text . '"},"at": {"atMobiles": ["' . $atMobiles . '"], "isAtAll": ' . $isAtAll . '}}';
    // 请求钉钉
    return ding($content);
}

/**
 * 发送消息，请求钉钉
 *
 * @param $content 请求内容 json字符串
 *
 * @return mixed
 */
function ding($content)
{
    // 获取发送钉钉请求地址
    $webhook = config('dev.ding')['webhook'];
    // 钉钉发送消息格式
    $opts = [
        'http' => [
            'method' => 'POST',
            'header' => 'Content-type: application/json;charset=utf-8',
            'content' => $content
        ]
    ];
    // 创建并返回一个资源流上下文，该资源流中包含了 $opts 中提前设定的所有参数的值
    $context = stream_context_create($opts);
    // 将整个文件读入一个字符串
    $result = file_get_contents($webhook, false, $context);
    // 返回请求结果
    return json_decode($result);
}